Send a Command/Query to an Instrument/Device through the VISA interface (GPIB / TCP)
#include <Visa.au3>
_viExecCommand($h_session, $s_command, $i_timeout_ms = -1)
Parameters
$h_session | A VISA descriptor (STRING) OR a VISA session handle (INTEGER) This it can be a string or an integer (a handle): * STRING -&gr; A VISA DESCRIPTOR is a string which specifies the resource with which to establish a communication session. An example descriptor is "GPIB::20::0". This function supports all valid VISA descriptors, including GPIB, TCP, VXI and Serial Interface instruments (ASRL). A detailed explanation of VISA descriptors is shown in the Remarks section of this function. As a SHORTCUT you can also use a STRING containing the address number (e.g. "20") of a GPIB instrument instead of typing the full descriptor (in that case, "GPIB::20::0") * INTEGER -&gr; A VISA session handle is an integer value returned by _viOpen. It is recommended that instead you use _viOpen and VISA session handles instead of descriptors if you plan to communicate repeteadly with an Instrument or Device, as otherwise each time that you contact the instrument you would incur the overhead of opening and closing the communication link. Once you are done using the instrument you must remember to close the link with _viClose. |
$s_command | Command/Query to execute (e.g. "*IDN?" or "SOURCE:POWER -20 dBM") A query MUST contain a QUESTION MARK (?) When the command is a QUERY the function will automatically wait for the instrument's answer (or until the operation times out) |
$i_timeout_ms | Optional: The operation timeout in MILISECONDS. This is mostly important for QUERIES only. This is an OPTIONAL PARAMETER. If it is not specified the last set timeout will be used. If it was never set before the default timeout (which depends on the VISA implementation) will be used. Timeouts can also be set separatelly with the _viSetTimeout function. Depending on the bus type (GPIB, TCP, etc) the timeout might not be set to the exact value that you request. Instead the closest valid timeout bigger than the one that you requested will be used. |
Return Value
The return value depends on whether the command is a QUERYSuccess: | Returns ZERO |
Failure: | Returns -1 if the VISA DLL could not be open |
or a NON ZERO value representing the VISA | |
error code (see the VISA programmer's guide) |
Success: | Returns the answer of the instrument to the QUERY |
Failure: | Returns -1 if the VISA DLL could not be open |
Returns -3 if the VISA DLL returned an unexpected number of results | |
or returns a NON ZERO value representing the VISA | |
error code (see the VISA programmer's guide) |
Remarks
* The VISA queries only return the 1st line of the device answer
Related
_viFindGpib, _viOpen, _viClose, _viSetTimeout, _viGTL, _viGpibBusReset
Example
;- This assumes that you have instrument set to GPIB address 3
; If you have an instrument in a different address change "GPIB::3::0" to the
; corresponding descriptor. Do the same for the call to _viOpen
; It shows how to use the _viExecCommand function in stand alone mode and combined
; with _viOpen and _viClose.
; It also shows the _viGTL function
#include <Visa.au3>
Dim $h_session = 0
; Query the ID of the instrument in GPIB address 3
MsgBox(0,"Step 1","Simple GPIB query using a VISA Descriptor")
Dim $s_answer = _viExecCommand("GPIB::3::0","*IDN?",10000) ; 10 secs timeout
MsgBox(0,"GPIB QUERY result",$s_answer) ; Show the answer
MsgBox(0,"Step 2","Go to LOCAL using VISA Descriptor")
_viGTL("GPIB::1::0") ; Go to local (exit remote control mode)
MsgBox(0,"Step 3","Simple GPIB query using a VISA address shortcut")
$s_answer = _viExecCommand("1","*IDN?") ; The address MUST BE A STRING
MsgBox(0,"GPIB QUERY result",$s_answer) ; Show the answer
MsgBox(0,"Info","Now let's use _viOpen and _viClose")
MsgBox(0,"Step 4","Open the instrument connection with _viOpen")
Dim $h_instr = _viOpen(3)
MsgBox(0,"Instrument Handle obtained", "$h_instr = " & $h_instr) ; Show the Session Handle
; Query the instrument
MsgBox(0,"Step 5","Query the instrument using the VISA instrument handle")
$s_answer = _viExecCommand($h_instr,"*IDN?") ; $h_instr is NOT A STRING now!
MsgBox(0,"GPIB QUERY result",$s_answer) ; Show the answer
; Query again. There is no need to OPEN the link again
MsgBox(0,"Step 6","Query again. There is no need to OPEN the link again")
$s_answer = _viExecCommand($h_instr,"*IDN?")
MsgBox(0,"GPIB QUERY result",$s_answer) ; Show the answer
MsgBox(0,"Step 7","Go to LOCAL using VISA instrument handle")
_viGTL($h_instr); Go to local (this is optional)
MsgBox(0,"Step 8","Close the Instrument connection using _viClose")
_viClose($h_instr) ; Close the instrument connection